【函数】计算cosine
import numpy as np
def single_cosine(vec1, vec2):
"""
计算两个向量的cosine
param vec1: vector: m * 1
param vec2: vector: m * 1
return: float value
"""
return np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2))
def cosine(mat1, mat2):
"""
计算两矩阵对应行元素的cosine值
param mat1: matrix: n * m
param mat2: matrix: n * m
return: vector: n * 1
"""
norm_func = lambda l: np.linalg.norm(l)
mat_norm1 = np.apply_along_axis(norm_func, 1, mat1)
mat_norm2 = np.apply_along_axis(norm_func, 1, mat2)
mat_mlt = np.sum(np.array(mat1) * np.array(mat2), axis=1)
result = mat_mlt / (mat_norm1 * mat_norm2)
return result
def matrix_cosine(vec, mat):
"""
计算vector和矩阵内所有行元素交叉的cosine值
param vec: vector: 1 * m
param mat: matrix: n * m
return: vector: n * 1
"""
norm_func = lambda l: np.linalg.norm(l)
mult_func = lambda l: l * vec
mat_norm = np.apply_along_axis(norm_func, 1, mat)
vec_norm = np.linalg.norm(vec)
mat_mlt = np.sum(np.apply_along_axis(mult_func, 1, mat), axis=1)
result = mat_mlt / (mat_norm * vec_norm)
return result